import de.wwag.vdz.basis.configmanager.model.*
import de.wwag.vdz.basis.configmanager.model.rtt.*
import static de.wwag.vdz.basis.configmanager.model.AuswahlMoeglichkeit.*
import static de.wwag.vdz.basis.kern.values.Prozessinfoart.*
import static de.wwag.vdz.basis.kern.values.Dokumenttypart.*
import static de.wwag.vdz.basis.kern.values.Colour.*
import static de.wwag.vdz.basis.kern.values.Aktion.*
import de.wwag.vdz.basis.configmanager.model.Deployment
import de.wwag.vdz.basis.configmanager.model.Deployment.DeploymentType
import static de.wwag.vdz.basis.configmanager.model.Deployment.DeploymentType.*
import static de.wwag.vdz.basis.configmanager.model.Regelwerk.Datenanreicherungsart.*;
import de.wwag.vdz.basis.configmanager.model.rtt.Regeltest.Regelart

//---------------------------------------------------------
// Übergreifend
//---------------------------------------------------------

pi1 = new Prozessinfo(bezeichnung: "Prozessinfo 1", art: Global, kuerzel: "PI 1")
pi2 = new Prozessinfo(bezeichnung: "Prozessinfo 2", art: Global, kuerzel: "PI 2")
pi3 = new Prozessinfo(bezeichnung: "Prozessinfo 3", art: Global, kuerzel: "PI 3")
pi4 = new Prozessinfo(bezeichnung: "Prozessinfo 4", art: Dokumentspezifisch, kuerzel: "PI 4")
pi5 = new Prozessinfo(bezeichnung: "Prozessinfo 5", art: Dokumentspezifisch, kuerzel: "PI 5")


im_dt1 = Dokumenttyp(kuerzel: "IM1", bezeichnung: "IM DT 1", art: EingangsDokumentIndizierer, auswahlMoeglich: DialogDurchSBUndRegelwerk, colour: SW, prozessinfos: [pi4, pi5])
im_dt2 = Dokumenttyp(kuerzel: "IM2", bezeichnung: "IM DT 2", art: EingangsDokumentIndizierer, auswahlMoeglich: DialogDurchSBUndRegelwerk, colour: SW, prozessinfos: [pi4])
im_dt3 = Dokumenttyp(kuerzel: "IM3", bezeichnung: "IM DT 3", art: EingangsDokumentIndizierer, auswahlMoeglich: DialogDurchSBUndRegelwerk, colour: SW)

us1 = newUploaderSicht("UP_SICHT_1", pi4, [im_dt1,im_dt2], [pi2,pi3], im_dt3, pi5 )

//---------------------------------------------------------
// Regelwerk Komposit Schaden
//---------------------------------------------------------

regelwerk('WV-Schaden', 'WVSchaden', Kranken)

persist << Rolle(bemerkung: "Test", bezeichnung: "Rolle", intranetGruppe: "BKV_Vertragsänd. mit Kreditentsch. BSW")
persist << Rolle(bemerkung: "Eine Bemerkung", bezeichnung: "d", intranetGruppe: "Clearing Darlehensantrag")
persist << Rolle(bemerkung: "Eine andere Bemerkung", bezeichnung: "f", intranetGruppe: "Clearing Darlehensantrag")
persist << Rolle(bemerkung: "Eine beliebige Bemerkung", bezeichnung: "ROLLE_OEC", intranetGruppe: "TPK_ADMINTEST")

r_A = Rolle(bezeichnung: "ROLLE_OEA", intranetGruppe: "INTRGRP_A")

oeA =  OE().OE('A/A') {
				OE('A/A1') {
					OE('A/A11') {
						PPK("UserA11-1", nichtKAP: ["DWSVNO"])
						PPK("uSerA11-2", nichtKAP: ["DUNDTW"])
					}
					OE('A/A12') {
						PPK("usErA12-1", nichtKAP: ["DKHMMA"])
						PPK("useRA12-2", nichtKAP: ["DKHJDT"])
					}
				
				}
				OE('A/A2') {
					OE('A/A21') {
						PPK("USerA21-1", nichtKAP: ["DSSPAS"])
						PPK("uSErA21-2", nichtKAP: ["G20FST"])
					}
					OE('A/A22') {
						PPK("usERA22-1", nichtKAP: ["DAHBVO"])
						PPK("USERa22-2", nichtKAP: ["DUNCMA"])
					}
				}
		}

dt_a1 = Dokumenttyp(kuerzel: "DT_A1", bezeichnung: "DT_A1")
dt_a2 = Dokumenttyp(kuerzel: "DT_A2", bezeichnung: "DT_A2")

dt_a_s01 = Dokumenttyp(kuerzel: "DT_A_S01", bezeichnung: "DT_A_S01")
dt_a_s02 = Dokumenttyp(kuerzel: "DT_A_S02", bezeichnung: "DT_A_S02")
dt_a_s03 = Dokumenttyp(kuerzel: "DT_A_S03", bezeichnung: "DT_A_S03")
dt_a_s04 = Dokumenttyp(kuerzel: "DT_A_S04", bezeichnung: "DT_A_S04")
dt_a_s05 = Dokumenttyp(kuerzel: "DT_A_S05", bezeichnung: "DT_A_S05")
dt_a_s06 = Dokumenttyp(kuerzel: "DT_A_S06", bezeichnung: "DT_A_S06")
dt_a_s07 = Dokumenttyp(kuerzel: "DT_A_S07", bezeichnung: "DT_A_S07")
dt_a_s08 = Dokumenttyp(kuerzel: "DT_A_S08", bezeichnung: "DT_A_S08")
dt_a_s09 = Dokumenttyp(kuerzel: "DT_A_S09", bezeichnung: "DT_A_S09")
dt_a_s10 = Dokumenttyp(kuerzel: "DT_A_S10", bezeichnung: "DT_A_S10")
dt_a_s11 = Dokumenttyp(kuerzel: "DT_A_S11", bezeichnung: "DT_A_S11")
dt_a_s12 = Dokumenttyp(kuerzel: "DT_A_S12", bezeichnung: "DT_A_S12")
dt_a_s13 = Dokumenttyp(kuerzel: "DT_A_S13", bezeichnung: "DT_A_S13")
dt_a_s14 = Dokumenttyp(kuerzel: "DT_A_S14", bezeichnung: "DT_A_S14")
dt_a_s15 = Dokumenttyp(kuerzel: "DT_A_S15", bezeichnung: "DT_A_S15")
dt_a_s16 = Dokumenttyp(kuerzel: "DT_A_S16", bezeichnung: "DT_A_S16")
notiz = Dokumenttyp(kuerzel: "667", bezeichnung: "Notiz")

(1..500).each {
	persist << Dokumenttyp(kuerzel: "K$it", bezeichnung: "Doktyp $it")
}

sichtA = Akte().Aktensicht([r_A]) {
	Aktenstruktur([], gruppierbar: true) {
		Korrespondenz([dt_a_s04, dt_a_s01, dt_a1, dt_a_s02, dt_a2, dt_a_s03])
	    Notizen([notiz])
	    Rechnungen([dt_a_s05, dt_a_s06, dt_a_s07, dt_a_s08])
	    Daten([dt_a_s09, dt_a_s10, dt_a_s11, dt_a_s12, dt_a_s15, dt_a_s16])
	}
}

ep1 = Einsprungpunkt(bezeichnung: "EP", bearbeitungssystem: "RSTerm", einsprungpunkt: "EP", einsprungpunktTest: "EPT")

at_a1 = Aktivitaetstyp(bezeichnung: "AT_A1", einsprungpunkt: ep1)
at_a2 = Aktivitaetstyp(bezeichnung: "AT_A2", einsprungpunkt: ep1)
at_a3 = Aktivitaetstyp(bezeichnung: "AT_A3", einsprungpunkt: ep1)
at_a4 = Aktivitaetstyp(bezeichnung: "AT_A4", einsprungpunkt: ep1)
at_a5 = Aktivitaetstyp(bezeichnung: "AT_A5", einsprungpunkt: ep1)
at_a6 = Aktivitaetstyp(bezeichnung: "AT_A6", einsprungpunkt: ep1)
at_a7 = Aktivitaetstyp(bezeichnung: "AT_A7", einsprungpunkt: ep1)
at_a8 = Aktivitaetstyp(bezeichnung: "AT_A8", einsprungpunkt: ep1)

vgtg = Vorgangstypgruppe(bezeichnung: "VTG", vorgangstypen: [])
vgtg2 = Vorgangstypgruppe(bezeichnung: "VTGB", vorgangstypen: [])

persist << vgtg
persist << vgtg2

def at_d_a1

vgt_a1 = newVT().Vorgangstyp(vgtg, bezeichnung: "VGT_A1", arbeitsanweisung: "Do it!", rollen: [r_A]) {
    at_d_a1 = MussAktivitaet(at_a1, direktrouting: false, prioBasis: 10, prioSummand: 10, maximaleTerminierungsdauer: 10) { addVermerke(delegate) }
}

def at_d_a2_1
def at_d_a2_2
def at_d_a2_3
def at_d_a2_4

vgt_a2 = newVT().Vorgangstyp(vgtg, bezeichnung: "VGT_A2", arbeitsanweisung: "Do it!", rollen: [r_A]) {
    at_d_a2_1 = MussAktivitaet(at_a2, direktrouting: false, prioBasis: 10, prioSummand: 10, maximaleTerminierungsdauer: 10) {
        addVermerke(delegate)

        at_d_a2_2 = MussAktivitaet(at_a3, direktrouting: true, prioBasis: 10, prioSummand: 10, maximaleTerminierungsdauer: 10) { addVermerke(delegate) }
    }
    at_d_a2_3 = KannAktivitaet(at_a5, direktrouting: false, prioBasis: 10, prioSummand: 10, maximaleTerminierungsdauer: 10) { addVermerke(delegate) }
    at_d_a2_4 = KannAktivitaet(at_a1, direktrouting: true, prioBasis: 10, prioSummand: 10, maximaleTerminierungsdauer: 10) { addVermerke(delegate) }
}


def at_d_a3_1
def at_d_a3_2

vgt_a3 = newVT().Vorgangstyp(vgtg, bezeichnung: "VGT_A3", arbeitsanweisung: "Do it!", rollen: [r_A]) {
    at_d_a3_1 = MussAktivitaet(at_a4, direktrouting: false, prioBasis: 10, prioSummand: 10, maximaleTerminierungsdauer: 10) { addVermerke(delegate) }
    at_d_a3_2 = KannAktivitaet(at_a5, direktrouting: false, prioBasis: 10, prioSummand: 10, maximaleTerminierungsdauer: 10) { addVermerke(delegate) }

    KannAktivitaet(at_a6, direktrouting: false, prioBasis: 10, prioSummand: 10, maximaleTerminierungsdauer: 10) { addVermerke(delegate) }
}

vgt_a4 = newVT().Vorgangstyp(vgtg, bezeichnung: "VGT_A4", arbeitsanweisung: "Do it!", rollen: [r_A]) {
    at_d_a4_1 = MussAktivitaet(at_a7, direktrouting: false, prioBasis: 10, prioSummand: 10, maximaleTerminierungsdauer: 10) {
        addVermerke(delegate)

        at_d_a4_2 = MussAktivitaet(at_a8, direktrouting: false, prioBasis: 10, prioSummand: 10, maximaleTerminierungsdauer: 10) { addVermerke(delegate) }
    }
}

bv_f_1 = Bearbeitungsvermerk(vermerk:"Fertigstellen Vermerk 1")


//---------------------------------------------------------
// Regelwerk Kranken Leistung
//---------------------------------------------------------

regelwerk('WK-Leistung', 'WKLeistung', Kranken)


//---------------------------------------------------------
// Regelwerk Unit Test
//---------------------------------------------------------

regelwerk('Unit Test', 'UT', Schaden)

utr1 = Rolle(bezeichnung: "Rolle 1", intranetGruppe: "BKV_Vertragsänd. mit Kreditentsch. BSW")
utr2 = Rolle(bezeichnung: "Rolle 2", intranetGruppe: "Clearing Darlehensantrag")
utr3 = Rolle(bezeichnung: "Rolle 3", intranetGruppe: "Clearing Darlehensantrag") // wird im RollenTest gelöscht!
utr4 = Rolle(bezeichnung: "Rolle 4", intranetGruppe: "TPK_ADMINTEST")

oeUT = OE().OE('UT/UT') {
				OE('UT/UT1') {
					PPK('ub8pea')
					SPK('SPK1') /* einziger SPK in UT/UT1 wird im Test geprüft */
				}
				OE('UT/UT2', verantwortliche: ['ub8pea']) {
					PPK('ub8kos')
					SPK('SPK2')
				}
				OE('UT/UT9') {
					PPK('ub8kef', einsehManuell: ['ub8pea'])
					PPK('ub8snb', einsehManuell: ['ub8kos'])
					PPK('ub8bac')
					
					SPK('SPK9a', push: [utr1], einseh: [utr2])
					SPK('SPK9b', push: [utr2], einseh: [utr1])
					SPK('SPK9c')
				}
			}
			
deleteOEnoPK = OE().OE('F/G') {
				OE('GG/HH') {
					OE('III/JJJ') {
							OE('KKKK/LLLL') {
							}
						}
					}
				}
				
deleteOEwithPK = OE().OE('OO/PP') {
					OE('QQ/RR') {
						OE('SSS/TTT') {
							PPK('ub8pea')
							SPK('SPK9a', push: [utr1], einseh: [utr2])
						}
					}
				}

ut_dt1 = Dokumenttyp(kuerzel: "DT_1", bezeichnung: "DT_01")
sichtUT = Akte().SichtUT([Rolle(bezeichnung: "ROLLE_UT", intranetGruppe: "INTRGRP_A")]) {
					Knoten1([], gruppierbar: true) {
						Korrespondenz([
							ut_dt1,
							Dokumenttyp(kuerzel: "DT_2", bezeichnung: "DT_02"),
							Dokumenttyp(kuerzel: "DT_3", bezeichnung: "DT_03"),
							Dokumenttyp(kuerzel: "DT_4", bezeichnung: "DT_04")
						])
					    Notizen([
					    	Dokumenttyp(kuerzel: "668", bezeichnung: "Notiz2")
					    ])
					    Rechnungen([
					    	Dokumenttyp(kuerzel: "DT_5", bezeichnung: "DT_05"),
							Dokumenttyp(kuerzel: "DT_6", bezeichnung: "DT_06"),
							Dokumenttyp(kuerzel: "DT_7", bezeichnung: "DT_07"),
							Dokumenttyp(kuerzel: "DT_8", bezeichnung: "DT_08")
					    ])
					    Daten([
							Dokumenttyp(kuerzel: "DT_9", bezeichnung: "DT_09"),
							Dokumenttyp(kuerzel: "DT_10", bezeichnung: "DT_10"),
							Dokumenttyp(kuerzel: "DT_11", bezeichnung: "DT_11"),
							Dokumenttyp(kuerzel: "DT_12", bezeichnung: "DT_12")
					    ])
					}
				}
				
dt_ut_1 = Dokumenttyp(kuerzel: "DT_UT_1", bezeichnung: "DT_UT_1")
dt_ut_2 = Dokumenttyp(kuerzel: "DT_UT_2", bezeichnung: "DT_UT_2")
dt_ut_3 = Dokumenttyp(kuerzel: "DT_UT_3", bezeichnung: "DT_UT_3")
dt_ut_4 = Dokumenttyp(kuerzel: "DT_UT_4", bezeichnung: "DT_UT_4")
dt_ut_5 = Dokumenttyp(kuerzel: "DT_UT_5", bezeichnung: "DT_UT_5")
dt_ut_6 = Dokumenttyp(kuerzel: "DT_UT_6", bezeichnung: "DT_UT_6")
dt_ut_7 = Dokumenttyp(kuerzel: "DT_UT_7", bezeichnung: "DT_UT_7")

ut_ep1 = Einsprungpunkt(bezeichnung: "EP1", bearbeitungssystem: "UTerm", einsprungpunkt: "EP1", einsprungpunktTest: "EP1T")
ut_ep2 = Einsprungpunkt(bezeichnung: "EP2", bearbeitungssystem: "UTerm", einsprungpunkt: "EP2", einsprungpunktTest: "EP2T")
ut_ep3 = Einsprungpunkt(bezeichnung: "EP3", bearbeitungssystem: "UTerm", einsprungpunkt: "EP3", einsprungpunktTest: "EP3T")
ut_ep4 = Einsprungpunkt(bezeichnung: "EP4", bearbeitungssystem: "UTerm", einsprungpunkt: "EP4", einsprungpunktTest: "EP4T")
ut_ep5 = Einsprungpunkt(bezeichnung: "EP5", bearbeitungssystem: "UTerm", einsprungpunkt: "EP5", einsprungpunktTest: "EP5T") // wird im EinsprungpunktTest gelöscht

ut_at1 = Aktivitaetstyp(bezeichnung: "UT_AT1", einsprungpunkt: ut_ep1)
ut_at2 = Aktivitaetstyp(bezeichnung: "UT_AT2", einsprungpunkt: ut_ep2)
ut_at3 = Aktivitaetstyp(bezeichnung: "UT_AT3", einsprungpunkt: ut_ep2)
ut_at4 = Aktivitaetstyp(bezeichnung: "UT_AT4", einsprungpunkt: ut_ep4)
ut_at5 = Aktivitaetstyp(bezeichnung: "UT_AT5", einsprungpunkt: ut_ep1) // wird im AktivitaetstypTest gelöscht

ut_bv1 = Bearbeitungsvermerk(vermerk: "Vermerk 1")
ut_bv2 = Bearbeitungsvermerk(vermerk: "Vermerk 2")
ut_bv3 = Bearbeitungsvermerk(vermerk: "Vermerk 3")
ut_bv4 = Bearbeitungsvermerk(vermerk: "Vermerk 4")
ut_bv5 = Bearbeitungsvermerk(vermerk: "Vermerk 5") // wird im VermerkTest gelöscht

ut_vtg1 = Vorgangstypgruppe(bezeichnung: "VTG1")
ut_vtg2 = Vorgangstypgruppe(bezeichnung: "VTG2")
ut_vtg3 = Vorgangstypgruppe(bezeichnung: "VTG3")
ut_vtg4 = Vorgangstypgruppe(bezeichnung: "VTG4")

ut_vt1 = newVT().Vorgangstyp(ut_vtg1, bezeichnung: "UT VT 1", rollen: [utr1]) {
    MussAktivitaet(ut_at1, direktrouting: false, prioBasis: 10, prioSummand: 10, maximaleTerminierungsdauer: 10) {
        MussAktivitaet(ut_at2, direktrouting: true, prioBasis: 10, prioSummand: 10, maximaleTerminierungsdauer: 10)
    }
    KannAktivitaet(ut_at3, direktrouting: false, prioBasis: 10, prioSummand: 10, maximaleTerminierungsdauer: 10)
    KannAktivitaet(ut_at4, direktrouting: true, prioBasis: 10, prioSummand: 10, maximaleTerminierungsdauer: 10, einsprungpunkt: ut_ep3) {
    	Vermerk(ut_bv1, aktion: Fertigstellen) // wird im VorgangstypTest gesucht (bv1 an at4 in vt1)
    }
}

ut_vt2 = newVT().Vorgangstyp(ut_vtg1, bezeichnung: "UT VT 2", rollen: [utr1], zusammenfuehrungVerhindern: true) {
    MussAktivitaet(ut_at1, direktrouting: false, prioBasis: 10, prioSummand: 10, maximaleTerminierungsdauer: 10) 
    KannAktivitaet(ut_at3, direktrouting: false, prioBasis: 10, prioSummand: 10, maximaleTerminierungsdauer: 10)
}

ut_vt3 = newVT().Vorgangstyp(ut_vtg1, bezeichnung: "UT VT 3", rollen: [utr1], zusammenfuehrungVerhindern: true) {
    MussAktivitaet(ut_at1, direktrouting: false, prioBasis: 10, prioSummand: 10, maximaleTerminierungsdauer: 10)
    MussAktivitaet(ut_at2, direktrouting: true, prioBasis: 10, prioSummand: 10, maximaleTerminierungsdauer: 10) 
    KannAktivitaet(ut_at3, direktrouting: false, prioBasis: 10, prioSummand: 10, maximaleTerminierungsdauer: 10)
}

ut_vt4 = newVT().Vorgangstyp(ut_vtg1, bezeichnung: "UT VT 4", rollen: [utr1], zusammenfuehrungVerhindern: true) {
    KannAktivitaet(ut_at3, direktrouting: false, prioBasis: 10, prioSummand: 10, maximaleTerminierungsdauer: 10)
}

ut_rm1 = ReferenzMapping(vorgangsart: "ReferenzVorgangsart1", dokumenttyp: ut_dt1)
ut_rm2 = ReferenzMapping(vorgangsart: "ReferenzVorgangsart2", dokumenttyp: ut_dt1)

o1 = newOrdnungsbegriff("SNR", "123-123-123")
o2 = newOrdnungsbegriff("KDNR", "345-345-345")
o3 = newOrdnungsbegriff("AKZ", "S CT 123")
o4 = newOrdnungsbegriff("VSNR", "12-123112-31")

v1 = newVorgang(o1, "Vorgang 1", ut_vt1)
v2 = newVorgang(o2, "Vorgang 2", ut_vt2)
v3 = newVorgang(o3, "Vorgang 3", ut_vt3)
v4 = newVorgang(o4, "Vorgang 4", ut_vt4)

a1 = newAktivitaet("Aktivitaet 1")
a2 = newAktivitaet("Aktivitaet 2")
a3 = newAktivitaet("Aktivitaet 3")
a4 = newAktivitaet("Aktivitaet 4")
a5 = newAktivitaet("Aktivitaet 5")
a6 = newAktivitaet("Aktivitaet 6")
a7 = newAktivitaet("Aktivitaet 7")
a8 = newAktivitaet("Aktivitaet 8")

d1 = newDokument("Dokument 1", ut_dt1)
d2 = newDokument("Dokument 2", ut_dt1)
d3 = newDokument("Dokument 3", ut_dt1)
d4 = newDokument("Dokument 4", ut_dt1)
d5 = newDokument("Dokument 5", ut_dt1)
d6 = newDokument("Dokument 6", ut_dt1)
d7 = newDokument("Dokument 7", ut_dt1)
d8 = newDokument("Dokument 8", ut_dt1)
d9 = newDokument("Dokument 9", ut_dt1)

rts1 = newSuite("Testsuite 1")
rts2 = newSuite("Testsuite 2")
rts3 = newSuite("Testsuite 3")

rt1 = newTest(rts1, "Test 1", Regelart.Doktypverfeinerung)
rt2 = newTest(rts1, "Test 2", Regelart.Routing)

rt3 = newTest(rts2, "Test 3", Regelart.Vorgangsbestimmung)
rt4 = newTest(rts2, "Test 4", Regelart.Vorgangsbestimmung)

rt5 = newTest(null, "Test 5", Regelart.Routing)
rt6 = newTest(null, "Test 6", Regelart.Routing)

dpl1 = newDeployment(DeploymentType.Test)
dpl2 = newDeployment(DeploymentType.Test)
dpl3 = newDeployment(DeploymentType.Prod)

da1 = newDatenanreicherung("Kranken 1", o3)